/********************************************************************* * * Copyright (C) 200r Andrew Khan, Al Mantei * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ***************************************************************************/ package jxl.write.biff; import jxl.biff.StringHelper; import jxl.biff.Type; import jxl.biff.WritableRecordData; /** * Record which specifies sort dialog box values */ class SortRecord extends WritableRecordData { private String column1Name; private String column2Name; private String column3Name; private boolean sortColumns; private boolean sortKey1Desc; private boolean sortKey2Desc; private boolean sortKey3Desc; private boolean sortCaseSensitive; /** * Constructor * * @param a Sort Column 1 Name * @param b Sort Column 2 Name * @param c Sort Column 3 Name * @param sc Sort Columns * @param sk1d Sort Key 1 Descending * @param sk2d Sort Key 2 Descending * @param sk3d Sort Key 3 Descending * @param scs Sort Case Sensitive */ public SortRecord(String a, String b, String c, boolean sc, boolean sk1d, boolean sk2d, boolean sk3d, boolean scs) { super(Type.SORT); column1Name = a; column2Name = b; column3Name = c; sortColumns = sc; sortKey1Desc = sk1d; sortKey2Desc = sk2d; sortKey3Desc = sk3d; sortCaseSensitive = scs; } /** * Gets the binary data for output to file * * @return the binary data */ public byte[] getData() { int byteCount = 5 + (column1Name.length() * 2) + 1; if (column2Name.length() > 0) byteCount += (column2Name.length() * 2) + 1; if (column3Name.length() > 0) byteCount += (column3Name.length() * 2) + 1; byte[] data = new byte[byteCount + 1]; // there is supposed to be an extra "unused" byte at the end int optionFlag = 0; if (sortColumns) optionFlag = optionFlag | 0x01; if (sortKey1Desc) optionFlag = optionFlag | 0x02; if (sortKey2Desc) optionFlag = optionFlag | 0x04; if (sortKey3Desc) optionFlag = optionFlag | 0x08; if (sortCaseSensitive) optionFlag = optionFlag | 0x10; data[0] = (byte) optionFlag; // data[1] is an index for sorting by a list - not implemented data[2] = (byte) column1Name.length(); data[3] = (byte) column2Name.length(); data[4] = (byte) column3Name.length(); // always write the headings in unicode data[5] = 0x01; StringHelper.getUnicodeBytes(column1Name, data, 6); int curPos = 6 + (column1Name.length() * 2); if (column2Name.length() > 0) { data[curPos++] = 0x01; StringHelper.getUnicodeBytes(column2Name, data, curPos); curPos += column2Name.length() * 2; } if (column3Name.length() > 0) { data[curPos++] = 0x01; StringHelper.getUnicodeBytes(column3Name, data, curPos); curPos += column3Name.length() * 2; } return data; } }